/**
 * Markdown 渲染器共享配置和工具函数
 * 包含插件、组件等配置，避免重复代码
 */

/**
 * 递归提取文本内容（处理 React 元素）
 * 用于从代码块中提取纯文本内容进行复制
 * 
 * @param {*} node - React 元素或文本节点
 * @returns {string} 提取的文本
 */
export const extractTextFromChildren = (node) => {
    if (typeof node === 'string') {
        return node;
    }
    if (Array.isArray(node)) {
        return node.map(extractTextFromChildren).join('');
    }
    if (node?.props?.children) {
        return extractTextFromChildren(node.props.children);
    }
    return '';
};

/**
 * 从 Markdown 内容中提取所有代码块
 * @param {string} markdown - Markdown 文本
 * @returns {string[]} 代码块数组
 */
export const extractCodeBlocks = (markdown) => {
    if (!markdown) return [];

    const codeBlockRegex = /```[\w]*\n([\s\S]*?)```/g;
    const codeBlocks = [];
    let match;

    while ((match = codeBlockRegex.exec(markdown)) !== null) {
        codeBlocks.push(match[1].trim());
    }

    return codeBlocks;
};

/**
 * 复制文本到剪贴板
 * @param {string} text - 要复制的文本
 * @returns {Promise<boolean>} 是否成功
 */
export const copyToClipboard = async (text) => {
    try {
        await navigator.clipboard.writeText(text);
        return true;
    } catch (error) {
        console.error('复制失败:', error);
        return false;
    }
};

